package org.soderiakelvy.model.dao.imp;

import java.io.Serializable;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.classic.Session;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.soderiakelvy.model.dao.SucursalProductoDao;
import org.soderiakelvy.model.domain.RepartoVO;
import org.soderiakelvy.model.domain.SucursalProductoVO;
import org.soderiakelvy.model.domain.SucursalVO;
import org.soderiakelvy.model.util.HibernateUtil;

public class SucursalProductoDaoImp implements SucursalProductoDao, Serializable{
	private static final long serialVersionUID = 1L;
	

	@Override
	public void insertSucursalProductoVO(SucursalProductoVO sucursalProducto) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.save(sucursalProducto);
        session.getTransaction().commit();
        session.close();
		
	}

	@Override
	public void updateSucursalProductoVO(SucursalProductoVO sucursalProducto) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.update(sucursalProducto);
        session.getTransaction().commit();
        session.close();

	}

	@Override
	public void deleteSucursalProductoVO(SucursalProductoVO sucursalProducto) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.delete(sucursalProducto);
        session.getTransaction().commit();
        session.close();
		
	}

	@Override
	public SucursalProductoVO getSucursalProductoVOById(long id) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        Criteria criteria = session.createCriteria(SucursalProductoVO.class);
        criteria.add(Restrictions.eq("sucursalProductoId", id)).uniqueResult();
        SucursalProductoVO spVO = (SucursalProductoVO) criteria.uniqueResult();
        session.close();
        return spVO;
	}

	@Override
	public List<SucursalProductoVO> getAllSucursalProductoVO() throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        Criteria criteria = session.createCriteria(SucursalProductoVO.class);
        criteria.addOrder(Order.asc("sucursalProductoId"));
        List<SucursalProductoVO> sucursalProducto = criteria.list();
        session.close();
	    return sucursalProducto;
	}

	@Override
	public List<SucursalProductoVO> getAllSucursalProductoBySucursal(SucursalVO sucursal) throws Exception {
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
        Session session = sessionFactory.openSession();
        Criteria criteria = session.createCriteria(SucursalProductoVO.class);
        criteria.add(Restrictions.eq("sucursal", sucursal));
        List <SucursalProductoVO> sp = criteria.list();
        session.close();
        return sp;
	}

	@Override
	public List<SucursalProductoVO> getAllSucursalProductoByRepartoDia(RepartoVO reparto, String diaVisita) throws Exception {
		
		return null;
	}
}
